package lexico;

import exceptions.LexerException;
import exceptions.ParserException;
import java.text.ParseException;
import java.util.ArrayList;

/**
 *
 * @author 
 */
public class ErrorTable extends ArrayList<Exception> {

    public ErrorTable() {
    }

    public void pushBackLexerException(LexerException le) {

        add(le);
    }

    /**
     * Talvez a responsabilidade de tratamento dos tokens seja dentro da classe
     * e não fora. Algo como o currentToken e getNextToken. Porém este efeito
     * pode ser conseguido facilmente pela iteração da Estrutura de dados fora
     * daqui.
     * @return
     */
    public ArrayList<Exception> getExceptions() {
//		return lexerException;
        return this;
    }

    /**
     * Imprime a lista de tokens
     */
    public void printErrors() {
        System.out.println("Erros: ");

//        for (LexerException le : this) {
//            System.out.print("| " + le.getTipoDeErro() + " ");
//            System.out.print("| \"" + le.getLexema() + "\" ");
//            System.out.print("| " + le.getLinha() + " ");
//            System.out.println("| " + le.getPosicao() + " |");
//        }
    }

    public void addError(SymbolTable st, String msg) {
        if (st.eof())
            add(new ParserException(msg + "\nFinal de arquivo alcançado prematuramente.", -1, -1));
        else
            add(new ParserException(msg, st.getCurrent().getLine(), st.getCurrent().getPosition()));
        
    }
}
